package main

import (
	"Ginproject/basic/day02/InterfaceProgram/mock"
	real2 "Ginproject/basic/day02/InterfaceProgram/real"
	"fmt"
)

/*
鸭子？
	传统类型系统：脊索类型动物、脊椎动物亚门，鸟纲雁形目。。
	duck typing: 是鸭子。
	“像鸭子走路、像鸭子叫，那就是...“
	描述事物的外部行为而非内部结构
	严格说go属于结构化类型系统，类似duck Typing

	同时需要Readable,Appendable 怎么办？  (apache polygene)
	同时具有python， c++的duck typing的灵活性
	又具有java的类型检查

接口定义
	使用者: download
	实现着: retriever
*/

type Retriever interface {
	Get(url string) string
}

func download(r Retriever) string {
	return r.Get("http://www.imooc.com")
}

func main() {
	var r Retriever
	r = mock.Retriever{"this is a fake imooc.com"}
	fmt.Println(download(r))
	r = real2.Retriever{}
	fmt.Println(download(r))

}

/*
接口的实现
	接口的实现是隐式的
	只要实现接口里的方法
*/
